package gold.enterprise;

public class PayPalOne {

    public int maxProfit(int[] priceList) {
        if (null == priceList || priceList.length <= 0) return 0;

        return dfs(priceList, 0, 0, 0);
    }

    /**
     * 用三个变量表示买卖三次的状态：
     * index: 表示哪一天
     * status：之前状态是买入（1）、 还是卖出（0）
     * k：统计总共交易了几次
     * <p>
     * 算法思路：递归根据状态查找
     */
    int dfs(int[] priceList, int index, int status, int k) {
        //递归终止条件：
        if (index >= priceList.length || k >= 2) return 0; //已经没得交易了，返回0;

        int profitNo = 0, profitBuy = 0, profitSale = 0;// 当前天三种动作

        profitNo = dfs(priceList, index + 1, status, k);
        if (1 == status) {// status == 1 上一次已经买入，当前状态为卖出
            profitSale = dfs(priceList, index + 1, 0, k + 1) + priceList[index];    //
        } else {
            profitBuy = dfs(priceList, index + 1, 1, k + 1) - priceList[index];
        }

        return Math.max(profitSale, Math.max(profitNo, profitBuy));
    }
}
